const db = wx.cloud
// 封装上传本地图片的 js
class Upload {
	constructor() {}

	// 上传本地图片
	image(count = 1, type = 'image') { // 规定默认选择一张图片
		return new Promise((resolve, reject) => { // 包装成 promise，等到图片上传后再存储，否则有可能发生异步
			uni.chooseMedia({
					count: count, //最多可以选择的文件个数
					mediaType: [type], //文件类型
					sourceType: ['album'] // 图片和视频选择的来源 album==> 从相册
				})
				.then(res => {
					resolve(res.tempFiles) // 将本地临时文件路径 (本地路径) 返回
				})
				.catch(err => {
					reject(err)
				})
		})
	}

	// 上传图片或者视频到云存储
	async cloud(route) {
		// 将视频或图片的本地路径进行拼接随机数修改，防止重复
		let index = route.lastIndexOf('.') // 查找 "." 在字符串出现的最后一个位置，返回一个下标
		let postfix = route.slice(index) // 通过下标进行截取,从 "." 到最后结尾，例如 .jpg
		// 拼接路径 例如 1674962588666-2025888.jpg
		let cloudpath = `${Date.now()}-${Math.floor(Math.random(0,1) * 10000000)}${postfix}`
		// console.log("cloudpath",cloudpath);

		// 调用上传云存储的方法
		return new Promise((resolve, reject) => {
			db.uploadFile({ 
				cloudPath: 'media/' + cloudpath, // 云存储路径 文件夹名+拼接的图片路径
				filePath: route, // 要上传本地文件资源路径
				success: async (res) => {
					// 因为 fileID 在环境共享下不支持展示图片，所以要将 fileID 转成 https 链接
					const res_url = await db.getTempFileURL({  //getTempFileURL 用 云文件ID 换取真实链接
						 fileList: [res.fileID]
					})
					// console.log("res_url",res_url);
					
					// 将修改后的返回
					resolve(res_url.fileList[0])
				},
				fail: err => {
					reject(err)
				}
			})
		})
	}

	// 删除云存储的文件	
	async delFile(fileId){
		return new Promise((resolve, reject) => {
			db.deleteFile({  // 云环境共享，所以被共享的不能使用 wx.cloud ，但是用户端可以
				 fileList: [fileId],
				success: async (res) => {
					resolve(res)
				},
				fail: err => {
					reject(err)
				}
			})
		})
	}
	
	// 预览图片
	preview(image, arr) {
		uni.previewImage({
			current: image, // 当前显示图片的 http 链接
			urls: arr // 需要预览的图片 http 链接列表['htt.xxx.jpg','htt.xxx.jpg']
		})
	}
	
	// 多图上传
	multiUpload(uploads, key) { //uploads 要上传的本地图片数组
		let imgStorage = []  //用来存储上传的图片，然后一起返回
		return new Promise((resolve, reject) => {
			uploads.forEach(async item => {
				// 调用上面封装的上传图片到云存储的方法
				let res = await this.cloud(item.imgUrl)
				// console.log("res",res);
				let realUrl = res.tempFileURL
				imgStorage.push({
					[key]: realUrl  // 将路径 push 进数组
				})
				
				// 只有当三张图片都上传之后才返回
				if (imgStorage.length == uploads.length) {
					resolve(imgStorage)
				}
			})
		})
	}


}

export { Upload }
